package com.cacho.s2b.lesson.learn;
import lombok.Getter;
import lombok.Setter;

import java.util.Date;

/*
 * 类class(对象共同属性和行为封装，对象的类型)-->对象（实例）-->特征+动作（属性=变量+行为=方法）
 * 类名 对象名 = new 类名();
 * 封装：将属性私有化，提供公共方法访问私有属性，为每个属性创建一对取值和赋值方法
 * this关键字，解决实例变量与局部变量冲突，对实例变量赋值
 * 构造方法（constructor）:实例化一个对象实际是调用这个方法的构造方法（1.方法与类名相同，2.无返回值）
 */
/** JavaDoc注释
 * @Description 类相关信息：1.修饰词（public，private，protected）2.修饰词（static，final，void）；3.需要返回参数的方法，4.void方法的返回值为空
 * @Author Lingwei
 * @date 2023/12/14
 **/
public class LearnClass {
    int startInt;
    double startDouble;
    char startChar;
    boolean startBoolean;
    String startString;
    @Getter
    @Setter
    private String way="";
    @Getter
    private Date date;

    //public LearnClass(){}  //空构造函数(默认有一个)
    public LearnClass(){this("无参数构造函数");System.out.println("无参数构造函数");}  //外部调用不带参数时，会自动拿参数去调带参数构造的方法
    //带参数构造函数：赋初始值
    public LearnClass(String way){this.way=way;System.out.println("有参数构造函数");}
    public static LearnClass defaultLearn(){
        return new LearnClass();
    }

    public void learn(){System.out.println("void方法的返回值为空");}
    public String learnWay(){
        return "测试";
    }
    public static String staticWay(String way) {
        return "该方法需要返回一个参数-->" + way;
    }
    public int intWay(String way) {
        return 4;
    }
    public String stringWay() {
        return "先对私有属性赋值的方法是："+way;
    }
    public Date LearnDate(Date date){return date;}

    public static void main (String[] args) throws Exception{
        LearnClass learn = new LearnClass("构造函数赋值"); //默认去调用构造函数
        LearnClass learn1 = new LearnClass(); //默认去调用构造函数
        System.out.println("getWay()方法："+learn.getWay());
        System.out.println("getWay()方法："+learn1.getWay());
        learn.learn();  // 没有返回值
        learn.way = learn.learnWay();  //局部变量
        System.out.println("静态方法 staticWay 可以直接在类内部调用-->"+ staticWay(learn.getWay()));
        learn.way = "返回int值方法";
        System.out.println("方法intWay 需要new创建对象后再在类内部调用："+ learn.intWay(learn.getWay()));
        learn.setWay("封装"); //对实例变量way赋值
        System.out.println(learn.stringWay());
        learn.date = new Date();
        System.out.println(learn.LearnDate(learn.getDate()));
        System.out.println("int的初始值："+learn.startInt);  //0
        System.out.println("double的初始值："+learn.startDouble);  //0.0
        System.out.println("char的初始值："+learn.startChar);  // "\u0000"
        System.out.println("boolean的初始值："+learn.startBoolean);  // false
        System.out.println("String的初始值："+learn.startString);  // null
    }
}
